home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
WOW! 2
/
WOW - Vol 2.iso
/
pd_share
/
system
/
16mhz
/
source
/
16mhz.c
next >
Wrap
C/C++ Source or Header
|
1992-06-27
|
2KB
|
121 lines
/*******************************************/
/* Modul : 16MHZ.C */
/* Aufgabe : Schaltet in 16MHZ-Modus mit */
/* eingeschaltetem Cache */
/*******************************************/
# include <portab.h>
# include <stdio.h>
# include <string.h>
# include <tos.h>
typedef struct
{
UBYTE id[4];
LONG value;
} COOKIE_STRUCT;
/* Prototypen */
LONG SuperOn( VOID );
VOID SuperOff( LONG adr );
WORD FindCookie( UBYTE *id, LONG *value );
WORD main( VOID )
{
LONG cvalue,
ret;
/* COOKIE suchen */
if( !FindCookie( "_MCH", &cvalue ) )
return( -1 );
/* Kein STE ?? */
if( (WORD)(cvalue >> 16) != 1 )
return( -2 );
ret = SuperOn();
/* Modus umschalten */
*(BYTE *)0xFF8E21L = 3;
SuperOff( ret );
puts( "\n\033p 16MHz \033q" );
puts( " by Markus Hövener \n\n" );
return( 0 );
}
/********************************************/
/* Schaltet in den Supervisormode */
/********************************************/
LONG SuperOn( VOID )
{
return( Super( (VOID*)1L )
? 0L
: Super( (VOID *)0L ) );
}
/********************************************/
/* Schaltet ihn wieder aus */
/********************************************/
VOID SuperOff( LONG adr )
{
if( adr )
Super( (VOID *)adr );
}
/********************************************/
/* Sucht einen COOKIE */
/********************************************/
WORD FindCookie( UBYTE *id, LONG *value )
{
COOKIE_STRUCT *jar;
LONG i = 0,
ret;
/* Zeiger auf den Jar holen */
ret = SuperOn();
jar = (COOKIE_STRUCT *)(*((LONG **)0x5a0L));
SuperOff( ret );
/* Kein Jar vorhanden */
if( !jar )
return( 0 );
/* Solange der NULL-Cookie nicht erreicht ist */
while( *((LONG *)&jar[i]) )
if( !strncmp( jar[i].id, id, 4L ) )
{
/* Wert des Cookies eintragen */
if( value != NULL )
*value = jar[i].value;
return( 1 );
}
else
++i;
/* Nicht gefunden... */
return( 0 );
}